package com.endurance.clients;

import com.endurance.entity.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ProjectName: spring-cloud-hoxton-parent
 * @Package: com.endurance.clients
 * @ClassName: DeptsClients
 * @Description:
 * @Author: sunlin
 * @CreateDate: 2024/02/05 17:27
 * @Version: 1.0
 */

@FeignClient("DEPTS")
// 修饰范围，代表我是一个声明式的伪HttpClient对象
public interface DeptsClients {

    // 调用部门的哪个接口？
    @GetMapping("/dept")
    public String dept();


    @GetMapping("/dept/getReturnList")
    public List<Dept> getReturnList(@RequestParam  String dept);

    /**
     * OpenFeign是一个伪客户端，实际上还是底层的RestTemplate发送请求，@PathVariable 使用了这个注解之后，才知道如何处理路径中的参数
     *
     * @param id
     * @return
     */
    @GetMapping("/dept/{id}")
    public Dept getParamsRestful(@PathVariable("id") Integer id);

    /**
     * 传递对象有两种方式： 一种是form表单的方式，一种是json的方式
     *
     * @param dept
     */
    @PostMapping("/dept/getPostParams")
    public void getPost(@RequestBody Dept dept);

    /**
     * SpringMVC  会自动转换 form 或者 ?name=xxx 的参数，这些参数统称为 requestParam
     * String name 的写法 默认和 @RequestParam String name 一样
     * 但是OpenFeign是一个伪客户端，他不知道，我所以需要加上@RequestParam此注解，才能正确调用远程方法
     * @param name
     * @return
     */
    @GetMapping("/dept/getByName")
    public List<Dept> getByName(@RequestParam String name);

}
